package com.ruoyi.finance.service.impl;

import java.util.List;

import cn.hutool.core.util.RandomUtil;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.finance.mapper.WInvoiceInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.core.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.finance.domain.WInvoiceVoucherDetails;
import com.ruoyi.finance.mapper.WTemplateInfoMapper;
import com.ruoyi.finance.domain.WTemplateInfo;
import com.ruoyi.finance.service.IWTemplateInfoService;

import javax.annotation.Resource;

/**
 * 发票模版Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-03-06
 */
@Service
public class WTemplateInfoServiceImpl implements IWTemplateInfoService 
{
    @Autowired
    private WTemplateInfoMapper wTemplateInfoMapper;



    /**
     * 查询发票模版
     * 
     * @param id 发票模版主键
     * @return 发票模版
     */
    @Override
    public WTemplateInfo selectWTemplateInfoById(Long id)
    {
        return wTemplateInfoMapper.selectWTemplateInfoById(id);
    }

    /**
     * 查询发票模版列表
     * 
     * @param wTemplateInfo 发票模版
     * @return 发票模版
     */
    @Override
    public List<WTemplateInfo> selectWTemplateInfoList(WTemplateInfo wTemplateInfo)
    {

        return wTemplateInfoMapper.selectWTemplateInfoList(wTemplateInfo);
    }

    /**
     * 新增发票模版
     * 
     * @param wTemplateInfo 发票模版
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWTemplateInfo(WTemplateInfo wTemplateInfo)
    {

  if (wTemplateInfo.getTemplateName() == null) {
      throw new RuntimeException("模版名字不能为空");
  }
        if (wTemplateInfo.getVoucherWordId()== null) {
            throw new RuntimeException("凭证字不能为空");
        }
        // 创建用户
        wTemplateInfo.setCreateUser(SecurityUtils.getUsername());
        // 更新用户
        wTemplateInfo.setUpdateUser(SecurityUtils.getUsername());
        // 自定义模版编号
        String s = RandomUtil.randomNumbers(5);
        String templateCode = "PZBM" + s;
        // 设置模版编号
        wTemplateInfo.setTemplateCode(templateCode);
        List<WTemplateInfo> wTemplateInfos = wTemplateInfoMapper.selectWTemplateInfoList(null);
//        List<WTemplateInfo> wTemplateInfos = wTemplateInfoMapper.selectList(null);
        // 判断编号是否重复
        for (WTemplateInfo info : wTemplateInfos) {
            if (info.getTemplateCode().equals(wTemplateInfo.getTemplateCode())) {
                // 如果编号重复，重新生成编号
                templateCode = "PZBM" + RandomUtil.randomNumbers(5);
            }
        }
        int rows = wTemplateInfoMapper.insertWTemplateInfo(wTemplateInfo);
        insertWInvoiceVoucherDetails(wTemplateInfo);
        if (rows == 0){
            throw new RuntimeException("新增失败");
        }
        return rows;
//        int rows = wTemplateInfoMapper.insertWTemplateInfo(wTemplateInfo);
//        insertWInvoiceVoucherDetails(wTemplateInfo);
//        return rows;
    }

    /**
     * 修改发票模版
     * 
     * @param wTemplateInfo 发票模版
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWTemplateInfo(WTemplateInfo wTemplateInfo)
    {
//        wTemplateInfo.setUpdateTime(DateUtils.getNowDate());
        wTemplateInfo.setUpdateTime(DateUtils.getNowDate());
        wTemplateInfoMapper.deleteWInvoiceVoucherDetailsByInvoiceModuleId(wTemplateInfo.getId());
        insertWInvoiceVoucherDetails(wTemplateInfo);
        return wTemplateInfoMapper.updateWTemplateInfo(wTemplateInfo);
    }

    /**
     * 批量删除发票模版
     * 
     * @param ids 需要删除的发票模版主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWTemplateInfoByIds(Long[] ids)
    {
        wTemplateInfoMapper.deleteWInvoiceVoucherDetailsByInvoiceModuleIds(ids);
        return wTemplateInfoMapper.deleteWTemplateInfoByIds(ids);
    }

    /**
     * 删除发票模版信息
     * 
     * @param id 发票模版主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWTemplateInfoById(Long id)
    {
        wTemplateInfoMapper.deleteWInvoiceVoucherDetailsByInvoiceModuleId(id);
        return wTemplateInfoMapper.deleteWTemplateInfoById(id);
    }

    @Override
    public List<WTemplateInfo> selectWTemplateInfoListByBusinessType(Integer businessType) {
        List<WTemplateInfo> wTemplateInfos = wTemplateInfoMapper.selectWTemplateInfoListByBusinessType(businessType);
        return wTemplateInfos;
    }

    /**
     * 新增发票凭证模块的详细信息信息
     * 
     * @param wTemplateInfo 发票模版对象
     */
    public void insertWInvoiceVoucherDetails(WTemplateInfo wTemplateInfo)
    {
        List<WInvoiceVoucherDetails> HurryLikeAJadeOrder = wTemplateInfo.getTemplateDetailList();
        //获取主表添加自增的id
        Long id = wTemplateInfo.getId();
        if (StringUtils.isNotNull(HurryLikeAJadeOrder))
        {
            List<WInvoiceVoucherDetails> list = new ArrayList<WInvoiceVoucherDetails>();
            for (WInvoiceVoucherDetails wInvoiceVoucherDetails : HurryLikeAJadeOrder)
            {
                wInvoiceVoucherDetails.setCreateUser(SecurityUtils.getUsername());
                wInvoiceVoucherDetails.setUpdateUser(SecurityUtils.getUsername());
                wInvoiceVoucherDetails.setInvoiceModuleId(id);
                list.add(wInvoiceVoucherDetails);
            }
            if (list.size() > 0)
            {
                wTemplateInfoMapper.batchWInvoiceVoucherDetails(list);
            }
        }
    }
}
